package com.mdl.springmvc.ioStream.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Desc
 * @Author madengling
 * @Time 2020/12/28 14:04
 */
public class FileInputStreamTest03 {
    public static void main(String[] args) {
        String path = "G:\\dhcc\\idea\\MavenProject\\src\\main\\webapp\\files\\";
        File file = new File(path+"a.txt");
        File file1 = new File(path+"b.txt");
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(file);
            // 读取数据，返回一个字节
            // 读取到末尾,返回-1
            int read = fis.read();
            System.out.println((char)read);
            System.out.println("=========");

            fis = new FileInputStream(file1);
            // 定义变量，保存数据
            int len;
            // 循环读取
            while ((len = fis.read())!=-1) {
                System.out.println((char)len);
            }
            System.out.println("=========");

            fis = new FileInputStream(file1);
            // 定义变量，作为有效个数
            // 定义字节数组，作为装字节数据的容器
            byte[] bys = new byte[2];
            while ((len=fis.read(bys)) != -1){
                // 每次读取后,把数组变成字符串打印
                // 最后一次读取时，只读取一个字节e，数组中，上次读取的数据没有被完全替换
                // abcde 共5个数据，一次读两个，第三次只能被替换一个，最后没被替换的读取的时候一起被读取了
                // 所以要通过l ，获取有效的字节 new String(b,0,len);
                String bb = new String(bys);
                System.out.println(bb);
            }
            System.out.println("=========");

            fis = new FileInputStream(file1);
            byte[] b = new byte[1024];
            while ((len=fis.read(b)) != -1){
                String aa = new String(b,0,len);
                System.out.println(aa);
            }
            System.out.println("=========");

            fis = new FileInputStream(file);
            b = new byte[1024];
            while ((len=fis.read(b)) != -1){
                String aa = new String(b,0,len);
                System.out.println(aa);
            }
            System.out.println("=====练习start=====");
            //从已有文件中获取字节，将该字节写出到另一个文件中
            fis = new FileInputStream(file1);
            fos = new FileOutputStream(file,true);
            b = new byte[1024];
            while ((len=fis.read(b)) != -1){
                fos.write(b,0,len);
            }
            //复制图片
            fis = new FileInputStream(path+"a.png");
            fos = new FileOutputStream(path+"b.png");
            b = new byte[1024];
            while ((len=fis.read(b)) != -1){
                fos.write(b,0,len);
            }
            System.out.println("=====练习end=====");

        }catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
